/*
 * Copyright 2012 Benoît Combe <benoit.combe@gmail.com>.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package fr.ipst.spot.formulaires.entites;

import fr.ipst.spot.entites.AgentCnam;
import fr.ipst.spot.entites.AgentExterieur;
import fr.ipst.spot.entites.Auditeur;
import fr.ipst.spot.entites.Evenement;
import fr.ipst.spot.exceptions.SpotExceptionForm;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;

/**
 *
 * @author Benoît Combe <benoit.combe@gmail.com>
 */
public class FormEvenement extends FormAbstractHtmlEntite<Evenement> {

    private String titre;
    private String resume;
    private Date date;
    private FormAuditeurId idAuditeur;
    private FormAgentCnamId idAgentCnam;
    private FormAgentExterieurId idAgentExterieur;
    private boolean enrtant;

    /**
     *
     * @param entity
     */
    public FormEvenement(Evenement entity) {
        super(new FormEvenementId(entity.getId()), entity);
        this.titre = entity.getTitre();
        this.resume = entity.getResume();
        this.date = entity.getDate();
        this.idAgentCnam = new FormAgentCnamId(entity.getAgentCnam().getIdAgentCnam());
        this.idAuditeur = new FormAuditeurId(entity.getAuditeur().getIdAuditeur());
        this.idAgentExterieur = new FormAgentExterieurId((entity.getAgentExterieur() != null ? entity.getAgentExterieur().getIdAgentExterieur() : -1));
        this.enrtant = entity.getEntrant();
    }

    /**
     *
     * @param request
     */
    public FormEvenement(HttpServletRequest request) {
        super(new FormEvenementId(request), request);
        this.resume = this.getNonNullStringFromRequest(request, "resume");
        this.titre = this.getNonNullStringFromRequest(request, "titre");
        this.date = this.getDateFromRequest(request, "date", "dd/MM/yyyy");
        this.idAuditeur = new FormAuditeurId(request);
        this.idAgentCnam = new FormAgentCnamId(request);
        this.idAgentExterieur = new FormAgentExterieurId(request);
        this.enrtant = this.getBooleanFromRequest(request, "entrant");
    }

    @Override
    public Evenement getEntityToPersist() throws SpotExceptionForm {
        return this.garnir(new Evenement(), true);
    }

    @Override
    protected Evenement garnir(Evenement entityToFeed, boolean creation) throws SpotExceptionForm {
        if (creation) {
            entityToFeed.setAgentCnam(new AgentCnam(idAgentCnam.getId()));
            entityToFeed.setAuditeur(new Auditeur(idAuditeur.getId()));
        }
        if (idAgentExterieur.isValid()) {
            entityToFeed.setAgentExterieur(new AgentExterieur(idAgentExterieur.getId()));
        } else {
            entityToFeed.setAgentExterieur(null);
        }
        entityToFeed.setDate(date);
        entityToFeed.setResume(resume);
        entityToFeed.setTitre(titre);
        entityToFeed.setEntrant(enrtant);
        return entityToFeed;
    }

    @Override
    protected void validate(boolean creation) throws SpotExceptionForm {
        boolean erreur = false;
        if (creation) {
            try {
                idAgentCnam.validate();
            } catch (SpotExceptionForm e) {
                erreur = true;
                this.concatErreurMsg(e);
            }
            try {
                this.idAuditeur.validate();
            } catch (SpotExceptionForm e) {
                erreur = true;
                this.concatErreurMsg(e);
            }
        } else {
            try {
                this.formId.validate();
            } catch (SpotExceptionForm e) {
                erreur = true;
                this.concatErreurMsg(e);
            }
        }
        try {
            this.isTitreDocument(titre);
        } catch (SpotExceptionForm e) {
            erreur = true;
            this.concatErreurMsg(e);
        }
        if (!resume.isEmpty()) {
            try {
                this.isLongText(resume, "résumé");
            } catch (SpotExceptionForm e) {
                this.concatErreurMsg(e);
            }
        }
        if (date == null) {
            erreur = true;
            this.concatErreurMsg(new SpotExceptionForm("La date est obligatoire"));
        }
        if (erreur) {
            throw new SpotExceptionForm(msgErreurValidate);
        }
    }

    /**
     *
     * @return
     */
    public Date getDate() {
        return date;
    }

    /**
     *
     * @param date
     */
    public void setDate(Date date) {
        this.date = date;
    }

    /**
     *
     * @return
     */
    public String getResume() {
        return resume;
    }

    /**
     *
     * @param resume
     */
    public void setResume(String resume) {
        this.resume = resume;
    }

    /**
     *
     * @return
     */
    public String getTitre() {
        return titre;
    }

    /**
     *
     * @param titre
     */
    public void setTitre(String titre) {
        this.titre = titre;
    }

    /**
     *
     * @return
     */
    public Integer getIdAgentCnam() {
        return idAgentCnam.getId();
    }

    /**
     *
     * @param idAgentCnam
     */
    public void setIdAgentCnam(Integer idAgentCnam) {
        this.idAgentCnam.setId(idAgentCnam);
    }

    /**
     *
     * @return
     */
    public Integer getIdAgentExterieur() {
        return idAgentExterieur.getId();
    }

    /**
     *
     * @param idAgentExterieur
     */
    public void setIdAgentExterieur(Integer idAgentExterieur) {
        this.idAgentExterieur.setId(idAgentExterieur);
    }

    /**
     *
     * @return
     */
    public Integer getIdAuditeur() {
        return idAuditeur.getId();
    }

    /**
     *
     * @param idAuditeur
     */
    public void setIdAuditeur(Integer idAuditeur) {
        this.idAuditeur.setId(idAuditeur);
    }

    /**
     *
     * @return
     */
    public boolean isEnrtant() {
        return enrtant;
    }

    /**
     *
     * @param enrtant
     */
    public void setEnrtant(boolean enrtant) {
        this.enrtant = enrtant;
    }
}
